package edu.nf.supermarket.mapper;

import edu.nf.supermarket.entity.Commodity;
import edu.nf.supermarket.entity.Orders;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author yjj
 * @date 2025-05-19
 */
public interface OrderMapper {
    /**
     * 生成订单
     */
    void addOrder(@Param("orders") Orders orders, @Param("userId") int userId);

    void addOrderItem(@Param("orderId") String orderId, @Param("commodityId") Integer commodityId, @Param("commodityNum") Integer commodityNum,@Param("spec1") String spec1,@Param("spec2") String spec2);

    /**
     * 查询所有订单
     */
    List<Orders> findAllOrder();

    /**
     * 查询该用户的所有订单
     */
    List<Orders> findOrderByUserId(@Param("userId") Integer userId, @Param("status") Byte status);

    /**
     * 修改订单状态
     */
    void updateOrderStatus(@Param("orderId") String orderId, @Param("orderStatus") Byte status);

    /**
     * 查看单个订单详情
     */
    Orders findOrderByOrderID(String orderId);

    /**
     * 查询购物车商品
     */
    Orders findCommodityByUserId(@Param("userId") Integer userId);

    /**
     * 添加到购物车
     */
    void addCommodityToCart(@Param("orderId") String orderId,
                            @Param("commodityId") Integer commodityId,
                            @Param("commodityNum") Integer commodityNum,
                            @Param("spec1") String spec1,
                            @Param("spec2") String spec2);

    /**
     * 修改购物车商品数量
     */
    void updateCommodityNum(@Param("orderId") String orderId, @Param("commodityId") Integer commodityId, @Param("commodityNum") Integer commodityNum);

    /**
     * 删除购物车中的商品
     */
    void deleteCommodityFromCart(@Param("orderId") String orderId, @Param("commodityId") Integer commodityId);

    /**
     * 查询购物车商品
     */
    Orders findCommodityByUserIdNoDelete(Integer userId);

    /**
     * 添加支付时间
     */
    void addPayTime(@Param("payTime") LocalDateTime payTime, @Param("orderId") String orderId);

    /**
     * 查询订单编号
     */
    Orders findOrderIdbyUserId(@Param("userId") Integer userId);

    /**
     * 生成结算订单
     */
    void addOrder1(@Param("orders") Orders orders, @Param("userId") int userId);

    /**
     * 根据订单号或商品名查询订单
     */
    List<Orders> searchOrdersByKeyword(@Param("keyword") String keyword, @Param("userId") Integer userId);

    /**
     * 根据时间查询订单
     */
    List<Orders> findOrdersByDateRange(@Param("startDate") LocalDate startTime, @Param("endDate") LocalDate endTime, @Param("userId") Integer userId);
    /**
     * 添加订单金额
     */
    void addOrderAmount(@Param("orderId") String orderId, @Param("payAmount") BigDecimal orderMoney);
    /**
     * 计算总销售额
     */
    Double calculateSales();
    /**
     * 计算某个时间内的销售额
     */
    Double calculateMonthSales(@Param("startDate") LocalDateTime startTime, @Param("endDate") LocalDateTime endTime);

    /**
     * 删除订单
     */
    void deleteOrder(@Param("orderId") String orderId);
    /**
     * 取消订单
     */
    void cancelOrder(@Param("orderId") String orderId);
}
